home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
dev
/
cross
/
GBDK-2.0.lha
/
GBDK
/
doc
/
map-frmt.txt
< prev
next >
Wrap
Text File
|
1998-10-01
|
3KB
|
71 lines
From version 2.0b13 the linker map file format has changed. The
changes were made by Michael Hope to make it more machine readable
so that it could be easially imported into a debugger to give
very elementry source level debugging.
File format
-----------
All data is heirachical with the children of a node being indented
from the parent by one tab stop. This was done to allow a debugger
to easially ignore sections that it didnt recognise. The top
level nodes currently defined are:
AREA
contains area information for a code segment including
its base, size and the values of any global labels
defined in that area.
MODULES
contains a list of modules linked by the linker and their
names
LIBRARIES
contains a list of the libraries linked and the modules
used from them
USERBASEDEF
A list of all user base address definitions
USERGLOBALDEF
A list of all user global variable definitions
AREA is the interesting one - the others were kept because the linker
already generates them.
As an example is worth PI words, heres an example of an AREA section.
The others are reasonably self explanitory.
-- BEGIN example
AREA _CODE
RADIX HEX
BASE 0200
SIZE 3754
ATTRIB REL CON
GLOBALS
.set_mode 0200
.wait_vbl 0236
_wait_vbl 0236
_enable_interrupts 026F
_disable_interrupts 0271
_set_interrupts 0273
_simple_enum 027E
AREA _DATA
RADIX HEX
BASE 3954
SIZE 00AA
ATTRIB REL CON
GLOBALS
_digits 39FC
-- END example
This section defines two areas - _CODE which is the standard C code
segment and _DATA which is the standard C data (static variables)
segment. _CODE runs from 0x0200 to 0x3754 + 0x0200 and was originally
RELocatable. Quite a few GLOBALS survived through the link process
including _simple_enum which begins at absolute address 0x027E. Note that
due to the way C exports function labels, this means that the function
simple_enum() begins at 0x027E - so a debugger could set a breakpoint
at 0x027E when asked to break when simple_enum() is called. This can
also be used to give a call back stack by modifying the CALL <fun>
in an assembler to push the name of the function called, allowing
you to see what function called a routine.
Note the tabs between the globals name and the value and that the
list within a section is sorted by value. In the current implementation
HEX is the only possible RADIX.